package main;

import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.corpus.document.sentence.Sentence;
import com.hankcs.hanlp.corpus.document.sentence.word.Word;
import com.hankcs.hanlp.dictionary.stopword.CoreStopWordDictionary;
import com.hankcs.hanlp.model.crf.CRFLexicalAnalyzer;
import com.hankcs.hanlp.seg.Segment;
import com.hankcs.hanlp.seg.common.Term;

import java.util.List;
import java.util.ListIterator;

public class CRFseg {


    public static void main(String[] args) throws Exception {
        CRFLexicalAnalyzer analyzer = new CRFLexicalAnalyzer();
        analyzer.enableOrganizationRecognize(true);
        analyzer.enableAllNamedEntityRecognize(true);
        analyzer.enableNameRecognize(true);
       // analyzer.enableCustomDictionaryForcing(true);   // 这个要关掉，否则识别出来的结构名人名啥的会拆掉

        HanLP.Config.ShowTermNature = false;    // 关闭词性显示
        HanLP.Config.CoreStopWordDictionaryPath = "data/dictionary/stopwords.txt";
       // HanLP.Config.enableDebug();
        Segment segment = HanLP.newSegment()
                .enableCustomDictionaryForcing(true)   // 强制开启自定义词典
                .enableAllNamedEntityRecognize(true)
                .enablePlaceRecognize(true)     // 开启地名识别
                .enableNameRecognize(true)      // 开启人名识别
                .enableTranslatedNameRecognize(true)  // 翻译人名识别
                .enableJapaneseNameRecognize(true)  // 开启日本人名识别
                .enableOrganizationRecognize(true);  // 开启结构名识别

        String testContext = "11月21日下午，“大国工匠”面对面——2016年感动中国十大人物李万君走进中南大学主题教育报告会在铁道校区大礼堂举行。\n" +
                "作为中车长春轨道客车股份有限公司转向架制造中心焊接车间的高级工人技师，李万君总结并制定“环口焊接七步操作法”等32种转向架焊接规范及操作方法，技术攻关150项，其中26项获得国家专利，满足了高速动车组、城铁车、出口车等20多种车型的生产需要。他先后荣获“全国劳动模范”、“全国五一劳动奖章”、“全国优秀共产党员”、“中华技能大奖”等几十项国家和省市荣誉称号，享受国务院政府津贴，被评为2016年度感动中国十大人物。2015年到2016年期间，曾四次受到习近平总书记的接见，是党的十八大、十九大代表，新时期我国技术工人的杰出典范。\n" +
                "李万君在“弘扬劳模精神与工匠精神——我的成长之路”主题报告中，和中南师生分享了自己立足岗位、刻苦攻关、服务轨道交通事业发展的成长路程。他表示：“把一件事情坚持十年，二十年，一辈子，这就是一种工匠精神！”“只要用工匠精神把每一天的工作干好，就能拥有人生的精彩。”\n" +
                "副校长黄健陵参加了报告会。他说，李万君同志在列车转向架焊接工作的岗位上，做出了不一般的成就，诠释了“一世专注，便是动人；一生专注，便是深邃”的工匠精神。希望中南师生学习这样一种精神，在各自的岗位上做出自己的努力。";

        testContext = "10月25日，“加强国际警务合作 共保北京冬奥安全”——大型国际体育赛事安保经验交流会议在北京隆重开幕。公安部常务副部长、北京市公安局局长王小洪，北京市人民政府副市长、北京2022年冬奥会和冬残奥会组织委员会执行副主席张建东等领导出席开幕式，加拿大、芬兰、法国、英国、德国、意大利、日本、韩国、俄罗斯9个国家警务部门和国际奥委会、国际刑警组织分别派代表团参加了此次会议。\n" +
                "\n" +
                "2022年北京冬奥会将由北京市与河北省张家口市联合举办，北京将成为奥运史上第一个既举办过夏奥会、又举办过冬奥会的“双奥城市”。对于冬奥会筹办工作，国家主席习近平明确提出绿色、共享、开放、廉洁办奥理念，以及举办一届精彩、非凡、卓越的奥运盛会的目标。为确保北京冬奥平安，推进首都警方与举办过世界性大型体育赛事的部分国家首都及城市警务部门建立健全双边及多边警务合作机制，经公安部、北京市政府批准，北京市公安局在京举办此次会议。\n" +
                "\n" +
                "开幕式上，公安部常务副部长、北京市公安局局长王小洪代表公安部致辞。他指出，随着国际化程度不断加深，大型体育赛事已经成为促进经济发展和文化交流的重要载体。继2008年成功举办第29届夏季奥运会和第13届夏季残奥会后，中国又先后成功举办了广州亚运会、深圳世界大学生运动会、南京青奥会和北京田径世锦赛，探索推出了一系列行之有效的新机制、新模式、新方法，积累了丰富的重大赛事安保经验。当前严峻复杂的反恐怖斗争和社会治安形势，给大型体育赛事安保工作带来极大的考验和挑战。学习借鉴、总结固化安保工作经验做法，不断加强和改进大型体育赛事安全保卫工作，已成为摆在世界各国警务部门面前的重要课题。\n" +
                "\n" +
                "王小洪强调，近年来，北京市公安局在确保首都安全稳定、圆满完成历次重大赛事安保任务的同时，不断加强与国际警务同行的切磋交流。此次会议，北京市公安局紧扣2022年冬奥安保实战，广泛搭建起互学互助互鉴的交流合作平台，对做好2022年冬奥会等大型国际体育赛事安保工作，具有十分重要的意义。出席会议的各方代表团，都有着丰富的大型国际赛事安保经验，希望大家在此次会议上分享经验成果，并借此建立起常态交流合作渠道，更好地维护国家和地区的安全与稳定，由此开启国际警务合作发展的崭新篇章。\n" +
                "\n" +
                "北京市政府副市长、北京2022年冬奥会和冬残奥会组织委员会执行副主席张建东代表北京市政府、北京冬奥组委会致辞。他指出，安保工作是成功办奥的基础和关键。北京冬奥会横跨北京、河北两省市，涉及三个赛区，约70%的竞赛项目在山区开放场地举行，安保工作范围广、战线长、难度大。应对这些挑战，特别需要国内外相关专家的帮助和支持。希望与会代表畅所欲言，充分分享大型赛事的安保经验，共同提升大型国际体育赛事安保能力。北京将全力推进京冀两地警方密切配合，为举办一届精彩、非凡、卓越的奥运盛会提供坚实的保障。\n" +
                "\n" +
                "国际刑警组织代表、俄罗斯警方代表分别发言。北京市公安局常务副局长衡晓帆代表北京市公安局作了主题发言。会议期间，北京警方还将与外方代表通过分主题论坛和参观冬奥组委办公区等形式开展相关业务交流。";

        // CRF  场分词
        Sentence sentence = analyzer.analyze(testContext);
        List<Word> list = sentence.toSimpleWordList();
        list  =  removeStopWord2(list);   // 去除停用词
//        System.out.println(sentence.toStringWithoutLabels());
//        System.out.println("======");
        // 打印场分词结果
        System.out.println("======  CRF场分词,比较好的识别新词");
        list.forEach(word->{
            System.out.print(word.value+ " ");
        });
        System.out.println();

        // 词典分词
        List<Term> seg_result_list = segment.seg(testContext);
        seg_result_list = removeStopWord(seg_result_list);   // 去除停用词

        System.out.println();
        System.out.println("====== 字典分词的结果");
        System.out.println();
        System.out.println(seg_result_list);
    }

    // 去停用词
    public static List<Term> removeStopWord(List seg_list) {
        ListIterator<Term> listIterator = seg_list.listIterator();
        while (listIterator.hasNext()) {
            if (!CoreStopWordDictionary.shouldInclude(listIterator.next())) {
                listIterator.remove();
            }
        }
        return seg_list;
    }

    // 去停用词
    public static List<Word> removeStopWord2(List<Word> seg_list) {
        ListIterator<Word> listIterator = seg_list.listIterator();
        while (listIterator.hasNext()) {
            Word word = listIterator.next();
            Term term = new Term(word.value, null);
            if (!CoreStopWordDictionary.shouldInclude(term)) {
                listIterator.remove();
            }
        }
        return seg_list;
    }

}



/*        String[] tests = new String[]{
                "商品和服务",
                "上海华安工业（集团）公司董事长谭旭光和秘书胡花蕊来到美国纽约现代艺术博物馆参观,搜索引擎,上海优浪信息科技有限公司",
                "微软公司於1975年由比爾·蓋茲和保羅·艾倫創立，数字山谷,滴滴出行，自然语言处理,18年啟動以智慧雲端、前端為導向的大改組。穆赫兰道，中南大学铁道学院" // 支持繁体中文
        };*/